package com.elitesland.b2c.com.repo;

import cn.hutool.core.util.StrUtil;
import com.elitesland.b2c.com.entity.QComFileDO;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 功能说明
 * </p>
 *
 * @author fred
 * @since 2021-02-08 10:49:12
 */
@Component
public class ComFileRepoProc {

    @Autowired
    private JPAQueryFactory jpaQueryFactory;

    private final QComFileDO qComFileDO = QComFileDO.comFileDO;

    /**
     * 获取文件编码
     *
     * @param id 文件ID
     * @return 文件编码
     */
    public String getFileCode(Long id) {
        return jpaQueryFactory.select(qComFileDO.fileCode)
                .from(qComFileDO)
                .where(qComFileDO.id.eq(id))
                .fetchOne();
    }

    /**
     * 获取文件的缩略图编码
     *
     * @param id 文件ID
     * @return 文件缩略图的编码
     */
    public String getThumbnailFileCode(Long id) {
        return jpaQueryFactory
                .select(qComFileDO.thumbnailFileCode)
                .from(qComFileDO)
                .where(qComFileDO.id.eq(id))
                .fetchOne();
    }

    /**
     * 获取文件的类型
     *
     * @param id 文件ID
     * @return 文件缩略图的编码
     */
    public String getMimeType(Long id) {
        return jpaQueryFactory.select(qComFileDO.mimeType)
                .from(qComFileDO)
                .where(qComFileDO.id.eq(id))
                .fetchOne();
    }

    /**
     * 获取文件编码 和 缩略图编码
     *
     * @param ids 文件ID
     * @return 文件编码 和 缩略图编码
     */
    public List<String> getFileCodes(List<Long> ids) {
        return jpaQueryFactory.select(qComFileDO.fileCode, qComFileDO.thumbnailFileCode)
                .from(qComFileDO)
                .where(qComFileDO.id.in(ids))
                .fetch()
                .stream()
                .flatMap(t -> {
                    List<String> codes = new ArrayList<>(4);
                    codes.add(t.get(qComFileDO.fileCode));

                    String temp = t.get(qComFileDO.thumbnailFileCode);
                    if (StrUtil.isNotBlank(temp)) {
                        codes.add(temp);
                    }
                    return codes.stream();
                }).collect(Collectors.toList());
    }
}